/** 
 * Project Name: farm-core 
 * File Name: BuguSmartPool.java 
 * Package Name: com.bugull.farm.core.frame.pool
 * Date: 2017年3月9日下午4:17:50 
 * Copyright (c) 2017, hadlinks All Rights Reserved. 
 * 
 */
package com.bugull.farm.core.frame.pool;

import com.codahale.metrics.MetricRegistry;

/** 
 * ClassName: OrderedSmartPool 
 * Function: 一个任务有序执行的线程池，有序依赖于所有同key的任务会被分配给同一个线程执行.  
 * date: 2017年3月9日 下午4:17:50  
 * 
 * @author songwei (songw@hadlinks.com)
 * @version 
 * @since JDK 1.8 
 */
public class OrderedSmartPool extends AbstractSmartPool{

	/**
	 * 有序的线程池
	 * @param size
	 * @param metricRegistry
	 */
	public OrderedSmartPool(int size, MetricRegistry metricRegistry){
		super(size, metricRegistry);
	}
	
	 /**
	 * 线程分配算法，简单的hash值散列
     * 挑选线程的方法，返回一个{@CopyOnWriteArrayList}索引，代表线程的序号
     * @param callable
     * @return
     */
	@Override
	public int distribution(BuguCallable<Boolean> callable) {
		return callable.getId().hashCode()%getSize();
	}

}
